home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / basic / menumkr.zip / MM.BAS next >
Encoding:
BASIC Source File  |  1985-02-09  |  13.5 KB  |  335 lines

  1. 10 ' MENU MAKER
  2. 20 ' by Andrew Fluegelman
  3. 30 ' Copyright (c) 1984 The Headlands Press, Inc.
  4. 40 ' May be reproduced in any medium for non-commercial use.
  5. 50 '
  6. 100 ' initialize
  7. 105 DEFINT A-Z:ON ERROR GOTO 9000
  8. 110 DEF FNLOCA(R,C)=160*R+2*C-162
  9. 115 DEF FNATTR(F,B)=-128*(F>15)+(F MOD 16)+(16*(B MOD 8))
  10. 120 DIM BK(4000) ' array for block karacters
  11. 125 DIM LIN1(160) ' array for line 1
  12. 130 R=1:C=1:FG=7:BG=0:I=0:J=0
  13. 135 DFG=7:DBG=0 ' default foreground & background colors
  14. 140 CR$=CHR$(13):BS$=CHR$(8):TB$=CHR$(9)
  15. 145 MARKED=0:MARK$="Z":CUT=0:CUT$="X":COPY$="C"
  16. 150 DELAY=10 '# ticks for delay
  17. 155 ASCIIVAL$=CHR$(0)
  18. 160 MMTEMP$="mmtemp.bin":MMHELP$="mmhelp.bin":INFIL$="mmsave.bin":SHOWFIL=0
  19. 165 DEF SEG=0:IF (PEEK(&H410) AND &H30)=&H30 THEN ADDRSEG=&HB000 ELSE ADDRSEG=&HB800
  20. 170 DEF SEG=ADDRSEG
  21. 200 ' startup
  22. 205 KEY OFF:FOR I=1 TO 10:KEY I, "":NEXT
  23. 210 COLOR DFG,DBG:SCREEN 0:WIDTH 80:CLS:LOCATE 1,1,0
  24. 215 PRINT TAB(15) "    * * * * * * MENU MAKER * * * * * *
  25. 220 PRINT TAB(15) "          by Andrew Fluegelman
  26. 225 PRINT
  27. 230 PRINT TAB(15) "Copyright (c) 1984 The Headlands Press, Inc.
  28. 235 PRINT:PRINT"  This program may be reproduced in any medium for non-commercial use.
  29. 240 GOSUB 8500:CLS
  30. 300 ' main loop
  31. 305 LOCATE R,C,1
  32. 310 K$=INKEY$: IF K$="" THEN 310
  33. 315 IF LEN(K$)>1 THEN GOSUB 500:GOTO 300
  34. 320 IF K$=CR$ THEN R=R+1:C=1:GOSUB 2000:GOTO 300
  35. 325 IF K$=BS$ THEN 455
  36. 330 IF K$=TB$ THEN C=C+5:GOSUB 2000:GOTO 300
  37. 335 GOSUB 400
  38. 340 GOTO 300
  39. 400 ' print k$
  40. 405 LOCA=FNLOCA(R,C):POKE LOCA,ASC(K$):POKE LOCA+1,FNATTR(FG,BG)
  41. 410 GOSUB 415:GOSUB 2000:RETURN
  42. 415 ' advance horizontally or vertically
  43. 420 IF VERT THEN R=R+1:RETURN ELSE C=C+1:RETURN
  44. 450 ' backspace
  45. 455 IF VERT THEN R=R-1 ELSE C=C-1
  46. 460 GOSUB 2000:K$=" ":GOSUB 400
  47. 465 IF VERT THEN R=R-1 ELSE C=C-1
  48. 470 GOSUB 2000:GOTO 300
  49. 500 ' extended keys
  50. 505 XK=ASC(MID$(K$,2,1))
  51. 510 IF XK>=16 AND XK <=50 THEN 700
  52. 515 IF (XK>=59 AND XK<=68) OR (XK>=84 AND XK<=113) THEN 800
  53. 520 IF (XK>=120 AND XK<=131) THEN 900
  54. 600 ' cursor control
  55. 605 IF XK=15 THEN C=C-5:GOSUB 2000:RETURN
  56. 610 IF XK=77 THEN C=C+1:GOSUB 2000:RETURN
  57. 615 IF XK=75 THEN C=C-1:GOSUB 2000:RETURN
  58. 620 IF XK=80 THEN R=R+1:GOSUB 2000:RETURN
  59. 625 IF XK=82 THEN GOSUB 8500:RETURN ' help
  60. 630 IF XK=72 THEN R=R-1:GOSUB 2000:RETURN
  61. 635 IF XK=71 THEN C=1:RETURN
  62. 640 IF XK=79 THEN C=80:RETURN
  63. 645 IF XK=115 THEN C=C-5:GOSUB 2000:RETURN
  64. 650 IF XK=116 THEN C=C+5:GOSUB 2000:RETURN
  65. 655 IF XK=119 THEN R=1:C=1:RETURN
  66. 660 IF XK=117 THEN R=25:C=1:RETURN
  67. 665 BEEP:RETURN
  68. 700 ' <alt>+alpha keys
  69. 702 IF XK=16 THEN GOSUB 8000:RETURN ' Quit
  70. 704 IF XK=17 THEN GOSUB 4200:RETURN ' Wipe screen clean
  71. 706 IF XK=20 THEN GOSUB 3200:RETURN ' Load a Text file
  72. 708 IF XK=22 THEN GOSUB 4900:RETURN ' Universal Foreground/Background
  73. 710 IF XK=23 THEN GOSUB 4400:RETURN ' Invert
  74. 712 IF XK=24 THEN GOSUB 5000:RETURN ' choose mOnO or cOlOr
  75. 714 IF XK=25 THEN GOSUB 7500:RETURN ' Print the screen to printer
  76. 716 IF XK=38 THEN GOSUB 3000:RETURN ' Load file
  77. 718 IF XK=30 THEN GOSUB 4800:RETURN ' print ASCII memory
  78. 720 IF XK=31 THEN GOSUB 3400:RETURN ' Save file
  79. 722 IF XK=32 THEN GOSUB 4650:RETURN ' change Direction
  80. 724 IF XK=33 THEN GOSUB 4000 :RETURN ' set Foreground color
  81. 726 IF XK=35 THEN GOSUB 4500:RETURN ' High intensity
  82. 728 IF XK=34 THEN GOSUB 4600:RETURN ' flashinG
  83. 730 IF XK=44 THEN GOSUB 1000:RETURN ' mark block Z
  84. 732 IF XK=45 THEN CUT=-1:GOSUB 1100:RETURN ' cut X
  85. 734 IF XK=46 THEN CUT=0:GOSUB 1100:RETURN ' copy C
  86. 736 IF XK=47 THEN GOSUB 1200:RETURN ' paste (V)
  87. 738 IF XK=48 THEN GOSUB 4100:RETURN 'set Background color
  88. 740 IF XK=49 THEN GOSUB 4300:RETURN ' Normal text
  89. 742 IF XK=50 THEN GOSUB 4700:RETURN ' set ASCII Memory
  90. 744 BEEP:RETURN
  91. 800 ' function keys
  92. 811 IF XK=59 THEN K$=CHR$(218):GOSUB 400:RETURN
  93. 812 IF XK=60 THEN K$=CHR$(191):GOSUB 400:RETURN
  94. 813 IF XK=61 THEN K$=CHR$(192):GOSUB 400:RETURN
  95. 814 IF XK=62 THEN K$=CHR$(217):GOSUB 400:RETURN
  96. 815 IF XK=63 THEN K$=CHR$(195):GOSUB 400:RETURN
  97. 816 IF XK=64 THEN K$=CHR$(180):GOSUB 400:RETURN
  98. 817 IF XK=65 THEN K$=CHR$(194):GOSUB 400:RETURN
  99. 818 IF XK=66 THEN K$=CHR$(193):GOSUB 400:RETURN
  100. 819 IF XK=67 THEN K$=CHR$(179):GOSUB 400:RETURN
  101. 820 IF XK=68 THEN K$=CHR$(196):GOSUB 400:RETURN
  102. 821 IF XK=104 THEN K$=CHR$(201):GOSUB 400:RETURN
  103. 822 IF XK=105 THEN K$=CHR$(187):GOSUB 400:RETURN
  104. 823 IF XK=106 THEN K$=CHR$(200):GOSUB 400:RETURN
  105. 824 IF XK=107 THEN K$=CHR$(188):GOSUB 400:RETURN
  106. 825 IF XK=108 THEN K$=CHR$(204):GOSUB 400:RETURN
  107. 826 IF XK=109 THEN K$=CHR$(185):GOSUB 400:RETURN
  108. 827 IF XK=110 THEN K$=CHR$(203):GOSUB 400:RETURN
  109. 828 IF XK=111 THEN K$=CHR$(202):GOSUB 400:RETURN
  110. 829 IF XK=112 THEN K$=CHR$(186):GOSUB 400:RETURN
  111. 830 IF XK=113 THEN K$=CHR$(205):GOSUB 400:RETURN
  112. 831 IF XK=84 THEN K$=CHR$(214):GOSUB 400:RETURN
  113. 832 IF XK=85 THEN K$=CHR$(183):GOSUB 400:RETURN
  114. 833 IF XK=86 THEN K$=CHR$(211):GOSUB 400:RETURN
  115. 834 IF XK=87 THEN K$=CHR$(189):GOSUB 400:RETURN
  116. 835 IF XK=88 THEN K$=CHR$(199):GOSUB 400:RETURN
  117. 836 IF XK=89 THEN K$=CHR$(182):GOSUB 400:RETURN
  118. 837 IF XK=90 THEN K$=CHR$(210):GOSUB 400:RETURN
  119. 838 IF XK=91 THEN K$=CHR$(208):GOSUB 400:RETURN
  120. 839 IF XK=92 THEN K$=CHR$(197):GOSUB 400:RETURN
  121. 840 IF XK=93 THEN K$=CHR$(215):GOSUB 400:RETURN
  122. 841 IF XK=94 THEN K$=CHR$(213):GOSUB 400:RETURN
  123. 842 IF XK=95 THEN K$=CHR$(184):GOSUB 400:RETURN
  124. 843 IF XK=96 THEN K$=CHR$(212):GOSUB 400:RETURN
  125. 844 IF XK=97 THEN K$=CHR$(190):GOSUB 400:RETURN
  126. 845 IF XK=98 THEN K$=CHR$(198):GOSUB 400:RETURN
  127. 846 IF XK=99 THEN K$=CHR$(181):GOSUB 400:RETURN
  128. 847 IF XK=100 THEN K$=CHR$(209):GOSUB 400:RETURN
  129. 848 IF XK=101 THEN K$=CHR$(207):GOSUB 400:RETURN
  130. 849 IF XK=102 THEN K$=CHR$(206):GOSUB 400:RETURN
  131. 850 IF XK=103 THEN K$=CHR$(216):GOSUB 400:RETURN
  132. 895 BEEP:RETURN
  133. 900 ' Alt + number keys
  134. 901 IF XK=120 THEN K$=CHR$(221):GOSUB 400:RETURN
  135. 902 IF XK=121 THEN K$=CHR$(222):GOSUB 400:RETURN
  136. 903 IF XK=122 THEN K$=CHR$(223):GOSUB 400:RETURN
  137. 904 IF XK=123 THEN K$=CHR$(220):GOSUB 400:RETURN
  138. 905 IF XK=124 THEN K$=CHR$(219):GOSUB 400:RETURN
  139. 995 BEEP:RETURN
  140. 1000 ' mark block
  141. 1005 IF MARKED THEN POKE B1M,B1K:POKE B1M+1,B1A
  142. 1010 B1M=FNLOCA(R,C):B1K=PEEK(B1M):B1A=PEEK(B1M+1):B1R=R:B1C=C
  143. 1015 POKE B1M,ASC(MARK$):POKE B1M+1,FNATTR(DBG,DFG):MARKED=-1:RETURN
  144. 1100 ' cut or copy a block
  145. 1105 MARKED=0
  146. 1110 B2M=FNLOCA(R,C):B2K=PEEK(B2M):B2A=PEEK(B2M+1):B2R=R:B2C=C
  147. 1115 POKE B2M+1,FNATTR(DBG,DFG):IF CUT THEN POKE B2M,ASC(CUT$) ELSE POKE B2M,ASC(COPY$)
  148. 1120 IF B1R>B2R THEN SWAP B1R,B2R:SWAP B1C,B2C ELSE IF B1R=B2R AND B1C>B2C THEN SWAP B1C,B2C
  149. 1125 ' cut/copy block
  150. 1130 DATTR=FNATTR(FG,BG)
  151. 1135 FOR I=B1R TO B2R:FOR J=B1C TO B2C
  152. 1140 LOCA=FNLOCA(I,J):BK(LOCA)=PEEK(LOCA):BK(LOCA+1)=PEEK(LOCA+1)
  153. 1145 IF CUT THEN POKE LOCA,32:POKE LOCA+1,DATTR
  154. 1150 NEXT J:NEXT I
  155. 1155 ' restore screen chars
  156. 1160 BK(B1M)=B1K:BK(B1M+1)=B1A
  157. 1165 BK(B2M)=B2K:BK(B2M+1)=B2A
  158. 1170 IF CUT THEN 1185
  159. 1175 POKE B1M,B1K:POKE B1M+1,B1A
  160. 1180 POKE B2M,B2K:POKE B2M+1,B2A
  161. 1185 R=B1R:C=B1C:RETURN
  162. 1200 ' paste block
  163. 1205 RR=R:CC=C
  164. 1210 IF (B2R-B1R+1>25-R+1) OR (B2C-B1C+1>80-C+1) THEN MSG$="Block too big to paste there":GOSUB 2300:GOSUB 2500:GOSUB 2700:RETURN
  165. 1215 FOR I=B1R TO B2R:FOR J=B1C TO B2C
  166. 1220 PASTELOCA=FNLOCA(R,C):BLOCKLOCA=FNLOCA(I,J):POKE PASTELOCA,BK(BLOCKLOCA):POKE PASTELOCA+1,BK(BLOCKLOCA+1)
  167. 1225 C=C+1:NEXT J:R=R+1:C=CC:NEXT I
  168. 1230 R=RR:C=CC:RETURN
  169. 2000 ' check for proper cursor position
  170. 2005 IF C>80 THEN C=1:R=R+1
  171. 2010 IF C<1 THEN C=80:R=R-1
  172. 2015 IF R>25 THEN R=1
  173. 2020 IF R<1 THEN R=25
  174. 2025 RETURN
  175. 2200 ' message routines
  176. 2300 SOUND 2000,1
  177. 2400 M=LEN(MSG$):FOR I=0 TO 2*M-1:LIN1(I)=PEEK(I):NEXT
  178. 2410 LOCATE 1,1:COLOR DBG,DFG:PRINT MSG$;:RETURN
  179. 2500 SOUND 32767,DELAY:SOUND 32767,1:RETURN ' delay
  180. 2600 FOR I=2*M TO 159:LIN1(I)=PEEK(I):NEXT
  181. 2610 LOCATE 1,M+1:PRINT SPACE$(78-M);:LOCATE 1,M+1:M=78:RETURN 'blank space for input q$
  182. 2700 FOR I=0 TO 2*M-1:POKE I,LIN1(I):NEXT:RETURN ' restore chars
  183. 3000 ' load Binary file
  184. 3005 MSG$="Load Binary file:":GOSUB 2300:GOSUB 2600:GOSUB 6000
  185. 3010 IF Q$="" THEN 3300
  186. 3015 IF LEFT$(Q$,1)="?" THEN GOSUB 8900:GOTO 3000
  187. 3020 GOSUB 3500:INFIL$=Q$
  188. 3025 BLOAD INFIL$,0
  189. 3030 SHOWFIL=0:RETURN
  190. 3200 ' load Text (ASCII) file
  191. 3205 MSG$="Load Text file:":GOSUB 2300:GOSUB 2600:GOSUB 6000
  192. 3210 IF Q$="" THEN 3300
  193. 3215 IF LEFT$(Q$,1)="?" THEN GOSUB 8900:GOTO 3200
  194. 3220 GOSUB 3500:INFIL$=Q$
  195. 3225 OPEN INFIL$ FOR INPUT AS #1:SHOWFIL=0
  196. 3230 COLOR FG,BG:CLS:LOCA=FNLOCA(1,1):ATTR=FNATTR(FG,BG):RR=0
  197. 3235 WHILE NOT EOF(1) AND RR<=25
  198. 3240 RR=RR+1:LINE INPUT #1, L$
  199. 3245 L=LEN(L$):IF L>80 THEN L=80
  200. 3250 CLOCA=LOCA
  201. 3255 FOR I=1 TO L:POKE CLOCA,ASC(MID$(L$,I,1)):POKE CLOCA+1,ATTR
  202. 3260 CLOCA=CLOCA+2:NEXT I
  203. 3265 LOCA=LOCA+160
  204. 3270 WEND
  205. 3275 CLOSE #1:LOCATE 1,1:R=1:C=1:RETURN
  206. 3300 ' cancel load routine
  207. 3305 IF SHOWFIL THEN GOSUB 2700:GOSUB 5950:SHOWFIL=0:RETURN
  208. 3310 GOSUB 2700:RETURN
  209. 3400 ' save a file
  210. 3405 MSG$="Save file name:":GOSUB 2300:GOSUB 2600:GOSUB 6000
  211. 3410 IF LEFT$(Q$,1)="?" THEN GOSUB 8900:GOTO 3400
  212. 3415 GOSUB 3300:IF Q$="" THEN RETURN
  213. 3420 IF Q$=" " THEN OUTFIL$=INFIL$ ELSE GOSUB 3500:OUTFIL$=Q$
  214. 3425 BSAVE OUTFIL$,0,&H1000
  215. 3430 RETURN
  216. 3500 ' process q$ for proper file name
  217. 3505 IF INSTR(Q$,".")=0 THEN Q$=Q$+"."
  218. 3510 RETURN
  219. 4000 ' set foreground color
  220. 4005 MSG$="Foreground color value (0-31):":GOSUB 2300:GOSUB 2600:GOSUB 6000
  221. 4010 IF Q$="" THEN GOSUB 2700:RETURN
  222. 4015 FG=VAL(Q$) MOD 32
  223. 4020 GOSUB 2700:RETURN
  224. 4100 ' set background color
  225. 4105 MSG$="Background color value (0-7):":GOSUB 2300:GOSUB 2600:GOSUB 6000
  226. 4110 IF Q$="" THEN GOSUB 2700:RETURN
  227. 4115 BG=VAL(Q$) MOD 8
  228. 4120 GOSUB 2700:RETURN
  229. 4200 ' wipe screen clean
  230. 4205 MSG$="Wipe over screen with Background color value (y/n?):":GOSUB 2300:GOSUB 6000
  231. 4210 IF Q$<>"Y" AND Q$<>"y" THEN GOSUB 2700:RETURN
  232. 4220 COLOR FG,BG:CLS:RETURN
  233. 4300 ' normal text
  234. 4305 MSG$="Normal Text":GOSUB 2300:GOSUB 2500:GOSUB 2700
  235. 4310 FG=FG MOD 8:RETURN
  236. 4400 ' invert colors
  237. 4405 MSG$="Invert Text":GOSUB 2300:GOSUB 2500:GOSUB 2700
  238. 4410 SWAP FG,BG:BG=BG MOD 8:RETURN
  239. 4500 ' high intensity text
  240. 4505 MSG$="High Intensity Text":GOSUB 2300:GOSUB 2500:GOSUB 2700
  241. 4510 IF (FG>=0 AND FG<=7) OR (FG>=16 AND FG<=23) THEN FG=FG+8:RETURN ELSE RETURN
  242. 4600 ' flashing text
  243. 4605 MSG$="Flashing Text":GOSUB 2300:GOSUB 2500:GOSUB 2700
  244. 4610 IF FG>=0 AND FG<=15 THEN FG=FG+16:RETURN ELSE RETURN
  245. 4650 ' change direction of cursor movement
  246. 4655 IF NOT VERT THEN VERT=-1:MSG$="Vertical Cursor" ELSE VERT=0:MSG$="Horizontal Cursor
  247. 4660 GOSUB 2300:GOSUB 2500:GOSUB 2700
  248. 4665 RETURN
  249. 4700 ' input any ascii character
  250. 4705 MSG$="ASCII value:":GOSUB 2300:GOSUB 2600:GOSUB 6000
  251. 4710 ASCIIVAL$=CHR$(VAL(Q$))
  252. 4715 GOSUB 2700
  253. 4720 RETURN
  254. 4800 ' print ASCII memory char
  255. 4805 K$=ASCIIVAL$:GOSUB 400:RETURN
  256. 4900 ' universal foreground/background
  257. 4905 MSG$="Universal foregound/background (y/n?):":GOSUB 2300:GOSUB 7000
  258. 4910 GOSUB 2700:IF Q$<>"Y" AND Q$<>"y" THEN RETURN
  259. 4915 MSG$="New Foregound (0-31)":GOSUB 2400:GOSUB 2600:GOSUB 6000
  260. 4920 GOSUB 2700:IF Q$="" THEN RETURN ELSE OFG=FG:FG=VAL(Q$) MOD 32
  261. 4925 MSG$="New Background (0-7)":GOSUB 2400:GOSUB 2600:GOSUB 6000
  262. 4930 GOSUB 2700:IF Q$="" THEN RETURN ELSE OBG=BG:BG=VAL(Q$) MOD 8
  263. 4935 FOR I=1 TO 3999 STEP 2:J=PEEK(I):IF J=FNATTR(OBG,OFG) THEN POKE I,FNATTR(BG,FG) ELSE POKE I,FNATTR(FG,BG)
  264. 4940 NEXT I:RETURN
  265. 5000 ' switch to monochrome or color
  266. 5005 MSG$="Work with Monochrome or Color screen (m/c?):":GOSUB 2300:GOSUB 7000:GOSUB 2700
  267. 5010 IF Q$="m" OR Q$="M" THEN GOSUB 5900:GOSUB 5100:GOSUB 5950:RETURN
  268. 5015 IF Q$="c" OR Q$="C" THEN GOSUB 5900:GOSUB 5200:GOSUB 5950:RETURN
  269. 5020 RETURN
  270. 5100 ' switch to mono
  271. 5105 DEF SEG=0:POKE &H410, (PEEK(&H410) OR &H30)
  272. 5110 SCREEN 0:WIDTH 80:LOCATE ,,1,12,13
  273. 5115 DEF SEG=&HB000:RETURN
  274. 5200 ' switch to color
  275. 5205 DEF SEG=0:POKE &H410, (PEEK(&H410) AND &HCF) OR &H10
  276. 5210 SCREEN 1,0,0,0:SCREEN 0:WIDTH 80:LOCATE ,,1,6,7
  277. 5215 DEF SEG=&HB800:RETURN
  278. 5900 ' save mmtempfl
  279. 5905 BSAVE MMTEMP$,0,&H1000
  280. 5910 RETURN
  281. 5950 ' recall mmtempfl
  282. 5955 BLOAD MMTEMP$,0
  283. 5960 RETURN
  284. 6000 ' input routine
  285. 6005 Q$=""
  286. 6010 QI$=INKEY$:IF QI$="" THEN 6010
  287. 6015 IF QI$=CHR$(13) THEN RETURN
  288. 6020 IF QI$<>CHR$(8) THEN 6030 ELSE IF Q$="" THEN BEEP:GOTO 6010
  289. 6025 IF QI$=CHR$(8) THEN PRINT CHR$(29);" ";CHR$(29);:Q$=LEFT$(Q$,LEN(Q$)-1):GOTO 6010
  290. 6030 PRINT QI$;:Q$=Q$+QI$:GOTO 6010
  291. 7000 ' inkey routine
  292. 7010 Q$=INKEY$:IF Q$="" THEN 7010
  293. 7020 RETURN
  294. 7500 ' lprint table with grid numbers
  295. 7505 LPRINT CHR$(15):WIDTH "lpt1:",132' switch to condensed/132 col width
  296. 7510 GOSUB 7555
  297. 7515 FOR I=0 TO 24
  298. 7520 IF I<10 THEN LPRINT " ";
  299. 7525 LPRINT I;
  300. 7530 FOR J=0 TO 79
  301. 7535 L=PEEK(160*I+J):LPRINT CHR$(L);
  302. 7540 NEXT J:LPRINT " ";I
  303. 7545 NEXT I
  304. 7550 GOSUB 7555:RETURN
  305. 7555 LPRINT"     0";:FOR I=1 TO 78
  306. 7560 IF I MOD 10=0 THEN LPRINT "*";:GOTO 7575
  307. 7565 IF I MOD 5=0 THEN LPRINT "!";:GOTO 7575
  308. 7570 LPRINT".";
  309. 7575 NEXT I:LPRINT"79":RETURN
  310. 8000 ' quit
  311. 8010 MSG$="QUIT MENU MAKER?":GOSUB 2300:GOSUB 2600:GOSUB 7000
  312. 8020 IF Q$<>"y" AND Q$<>"Y" THEN GOSUB 2700:RETURN
  313. 8025 KILL MMTEMP$:SYSTEM
  314. 8500 ' print help to screen
  315. 8505 GOSUB 5900
  316. 8510 BLOAD MMHELP$,0
  317. 8515 K$=INKEY$:IF K$="" THEN 8515
  318. 8520 GOSUB 5950
  319. 8525 RETURN
  320. 8900 ' show files
  321. 8905 IF NOT SHOWFIL THEN SHOWFIL=-1:GOSUB 2700:GOSUB 5900
  322. 8910 IF LEN(Q$)>1 THEN FIL$=RIGHT$(Q$,LEN(Q$)-1) ELSE FIL$=""
  323. 8915 IF LEFT$(FIL$,1)=" " THEN FIL$=RIGHT$(FIL$,LEN(FIL$)-1):GOTO 8915
  324. 8925 COLOR DBG,DFG:CLS:LOCATE 2,1
  325. 8930 PRINT "Available Files are:":COLOR DFG,DBG
  326. 8935 IF FIL$<>"" THEN FILES FIL$ ELSE FILES
  327. 8940 COLOR DBG,DFG
  328. 8945 RETURN
  329. 9000 ' error traps
  330. 9005 IF ERL=3025 THEN BEEP:GOSUB 2700:RESUME 3000
  331. 9010 IF ERL=3225 THEN BEEP:GOSUB 2700:RESUME 3200
  332. 9015 IF ERL=3425 THEN BEEP:GOSUB 2700:RESUME 3400
  333. 9020 IF ERL=8510 THEN BEEP:MSG$="No "+MMHELP$+" file available":GOSUB 2400:FOR I=1 TO 3:GOSUB 2500:NEXT I:RESUME 8520
  334. 9999 ON ERROR GOTO 0
  335.